import axios from 'axios'

// 创建axios实例
const api = axios.create({
  baseURL: 'http://localhost:8087', // 使用环境变量配置
  //baseURL:'http://10.128.135.33:8087', // 使用实际的后端服务地址
  timeout: 120000, // 超时时间提升到120秒，防止AI接口超时
  headers: {
    'Content-Type': 'application/json'
  }
})

// 不需要token验证的接口列表
const noAuthApis = [
  '/users/loginByPassword',
  '/users/loginByCode', 
  '/users/register',
  '/users/resetPassword',
  '/users/code',
  '/managers/login'
]

// 管理员接口列表
const adminApis = [
  '/managers/'
]

// 获取用户token的函数
function getUserToken() {
  try {
    const userInfo = localStorage.getItem('user')
    if (userInfo) {
      const user = JSON.parse(userInfo)
      return user.token || ''
    }
  } catch (e) {
    console.warn('获取用户token失败:', e)
  }
  return ''
}

// 获取管理员token的函数
function getAdminToken() {
  try {
    const adminInfo = localStorage.getItem('adminInfo')
    if (adminInfo) {
      const admin = JSON.parse(adminInfo)
      return admin.token || ''
    }
  } catch (e) {
    console.warn('获取管理员token失败:', e)
  }
  return ''
}

// 请求拦截器
api.interceptors.request.use(
  (config) => {
    // 如果是FormData，删除Content-Type让浏览器自动设置
    if (config.data instanceof FormData) {
      delete config.headers['Content-Type']
    }
    
    // 检查是否需要添加token
    const needAuth = !noAuthApis.some(path => config.url?.includes(path))
    if (needAuth) {
      // 检查是否为管理员接口
      const isAdminApi = adminApis.some(path => config.url?.includes(path))
      
      if (isAdminApi) {
        // 管理员接口使用管理员token
        const adminToken = getAdminToken()
        if (adminToken) {
          config.headers['token'] = adminToken
        }
      } else {
        // 普通用户接口使用用户token
        const userToken = getUserToken()
        if (userToken) {
          config.headers['token'] = userToken
        }
      }
    }
    
    // 打印前端即将发送给后端的请求信息
    console.log('➡️ 发送请求:', {
      url: config.url,
      method: config.method,
      headers: config.headers,
      params: config.params,
      data: config.data
    })
    return config
  },
  (error) => {
    console.error('❌ 请求拦截器错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  (response) => {
    console.log('✅ 收到响应:', {
      status: response.status,
      statusText: response.statusText,
      url: response.config.url,
      data: response.data
    })
    return response.data
  },
  (error) => {
    console.error('❌ 响应错误:', {
      message: error.message,
      status: error.response?.status,
      statusText: error.response?.statusText,
      url: error.config?.url,
      data: error.response?.data
    })
    
    if (error.response?.status === 401) {
      console.log('🔐 认证失效，清除Token并跳转登录页')
      
      // 检查是否为管理员接口
      const isAdminApi = adminApis.some(path => error.config?.url?.includes(path))
      
      if (isAdminApi) {
        // 管理员接口401错误处理
        import('../utils/adminAuth').then(({ clearAdminAuth }) => {
          clearAdminAuth()
          // 跳转到管理员登录页
          window.location.href = '/admin/login'
        })
      } else {
        // 普通用户接口401错误处理
        import('../utils/auth').then(({ redirectToLogin }) => {
          redirectToLogin()
        })
      }
    }
    
    // 网络连接错误
    if (error.code === 'ECONNREFUSED' || error.code === 'ERR_NETWORK') {
      console.error('🌐 网络连接失败 - 后端服务可能未启动')
    }
    
    // 超时错误
    if (error.code === 'ECONNABORTED') {
      console.error('⏰ 请求超时 - 检查网络连接或后端响应时间')
    }
    
    return Promise.reject(error)
  }
)

export default api
